linux - shell 脚本给逗号分隔的内容添加双引号
黄舟
黄舟 2017-04-17 15:00:51
0
6
466

有個文件a,其內容為:

1, 2, 3
$ head a 1, 2, 3

想把上面的文件转成如下的格式 用于 sql 条件查询中:

"1","2","3"

利用awk試了以下三種方式:

#多出了一个空行 $ awk -v 'RS= ' {print} a 1, 2, 3
#想通过这种方式删除空行 失败 $ awk -v 'RS= ' '{gsub(/^$/,"");print}' a 1, 2, 3
#3后面有个换行 $ awk -v 'RS= ' 'ORS=","{gsub(/,$/,"");print "\""$0"\""}' a "1","2","3 ",%

不知道有没更好的方式实现此功能?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua (6)
伊谢尔伦
ruby -e 'print $_.gsub(/\d/){|i| %("#{i}")} while gets' a

解释:
1,ruby -e执行后面字串命令
2,$_表示gets的内容
3,gsub用于字串匹配替换
4,%(...), 用于生成字串, 否则要""#{i}"", 比较难看
5,gets, 会读入标准输入, 或文件

或更简单的使用sed:

sed 's,\([0-9]\),"\1",g' a

解释:
1,sed默认对文件的每一行执行动作
2,s表示进行文本替换
3,,为分隔符, 可以是;,/,!
4,\(...\)表示正则表达式的'组', 以方便后面的\1进行反向引用
5,[0-9]匹配数字
6,g表示替换所有匹配

    左手右手慢动作
    cat a | sed -e 's,\([0-9]\),\"\1\",g'
      巴扎黑

      如果你不介意,可以使用 Python 來寫 script:

      步驟1: 利用 Python 寫 script,取名change(也可以是別的名字):

      #!/usr/bin/python3 import sys with open(sys.argv[1]) as reader: for line in reader: items = line.strip().split(',') print(', '.join(('"{0}"'.format(item.strip()) for item in items)))

      步驟2: 記得在 script:change最上方加入 shebang line (#! 再加上有效的 Python 路徑)

      #!/usr/bin/python3

      步驟3: 將 scriptchange的權限改為可執行,比如說:

      $ chmod change a+x

      步驟4: 將change放到PATH中的任何路徑下,比如說:

      $ sudo mv change /usr/local/bin

      之後就可以用它來轉換拉:

      $ change a "1", "2", "3"
        左手右手慢动作

        同可以sed

        • cat a | sed -e 's,\(\s\)\+,\1,g' -e 's,\(\S\+\),"\1",g'

        当然也有其它方式

        • cat a | perl6 -e 'dd .split(/\s+/) for $*IN.lines'

          阿神

          看题主使用AWK的方式,以下是我测试可行的方案

          代码:

          awk 'gsub(/,/," "){for(i=1;i<=NF;i++){if(i
            PHPzhong

            我来一个node版的:

            #!/usr/local/bin/node var fs = require('fs') var args = process.argv.slice(2) var text = "" args.forEach(file => { try { text = text + "\n" + String(fs.readFileSync(file)).trim() } catch (e) { console.log(e.toString()) } }) if (text) { console.log(text.trim().split(/\n|,/).map(char => `\"${char}\"`).join(",")) }

            可以这样使用:

            $ chmod 755 change.js $ node ./change.js a b

            a文件的内容为1,2,3
            b文件的内容为4,5,6

            结果输出:"1","2","3","4","5","6"

            注意:我用的是Mac,linux中跟Mac路径不一致,请使用which node查找node所在位置

              Muat turun terkini
              Lagi>
              kesan web
              Kod sumber laman web
              Bahan laman web
              Templat hujung hadapan
              Tentang kita Penafian Sitemap
              Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!