有個文件 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
",%
不知道有没更好的方式实现此功能?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
解释:
1,
ruby -e执行后面字串命令2,
$_表示gets的内容3,
gsub用于字串匹配替换4,
%(...), 用于生成字串, 否则要""#{i}"", 比较难看5,
gets, 会读入标准输入, 或文件或更简单的使用sed:
解释:
1,
sed默认对文件的每一行执行动作2,
s表示进行文本替换3,
,为分隔符, 可以是;,/,!等4,
\(...\)表示正则表达式的'组', 以方便后面的\1进行反向引用5,
[0-9]匹配数字6,
g表示替换所有匹配如果你不介意,可以使用 Python 來寫 script:
步驟1: 利用 Python 寫 script,取名
change(也可以是別的名字):步驟2: 記得在 script:
change最上方加入 shebang line (#! 再加上有效的 Python 路徑)步驟3: 將 script
change的權限改為可執行,比如說:步驟4: 將
change放到PATH中的任何路徑下,比如說:之後就可以用它來轉換拉:
同可以
sedcat a | sed -e 's,\(\s\)\+,\1,g' -e 's,\(\S\+\),"\1",g'当然也有其它方式
cat a | perl6 -e 'dd .split(/\s+/) for $*IN.lines'看题主使用AWK的方式,以下是我测试可行的方案
代码:
我来一个node版的:
可以这样使用:
a文件的内容为
1,2,3b文件的内容为
4,5,6结果输出:
"1","2","3","4","5","6"注意:我用的是Mac,linux中跟Mac路径不一致,请使用
which node查找node所在位置