在每列的末尾添加一个模式
adding a pattern to the end of each column
假设我有一个类似于这种格式的文件:
"pop","hand stuff","test "
"non","no way","good "
除了只有 3 列外,它还有数百列。我想在每列的末尾添加 @ 所以输出是
"pop@","hand stuff@","test @"
"non@","no way@","good @"
如果我只有少量列,那么我可以
awk -F"," vOFS=, '{print "@","@","@"}'
但是如果我有很多列并且我不想在 awk 脚本中指定每一列,我该怎么做呢?
您可以像下面这样使用 awk 的 gsub 函数。
awk '{gsub(/",/, "@\",");sub(/"$/, "@\"")}1' file
示例:
$ echo '"pop","hand stuff","test "' | awk '{gsub(/",/, "@\",");sub(/"$/, "@\"")}1'
"pop@","hand stuff@","test @"
只要您的列不包含疯狂数据(具体来说,\",
嵌入在字符串中),sed 就更容易:
OSX/BSD:
sed -E 's/"(,|$)/@"/g'
GNU:
sed -r 's/"(,|$)/@"/g'
$ sed -r 's/("[^"]+)"/@"/g' file
"pop@","hand stuff@","test @"
"non@","no way@","good @"
假设我有一个类似于这种格式的文件:
"pop","hand stuff","test "
"non","no way","good "
除了只有 3 列外,它还有数百列。我想在每列的末尾添加 @ 所以输出是
"pop@","hand stuff@","test @"
"non@","no way@","good @"
如果我只有少量列,那么我可以
awk -F"," vOFS=, '{print "@","@","@"}'
但是如果我有很多列并且我不想在 awk 脚本中指定每一列,我该怎么做呢?
您可以像下面这样使用 awk 的 gsub 函数。
awk '{gsub(/",/, "@\",");sub(/"$/, "@\"")}1' file
示例:
$ echo '"pop","hand stuff","test "' | awk '{gsub(/",/, "@\",");sub(/"$/, "@\"")}1'
"pop@","hand stuff@","test @"
只要您的列不包含疯狂数据(具体来说,\",
嵌入在字符串中),sed 就更容易:
OSX/BSD:
sed -E 's/"(,|$)/@"/g'
GNU:
sed -r 's/"(,|$)/@"/g'
$ sed -r 's/("[^"]+)"/@"/g' file
"pop@","hand stuff@","test @"
"non@","no way@","good @"