我想根据以下要求将平面数据文件转换为新文件:
1)更改制表符分隔为桩分隔" |"。
2)删除每个"列上的任何前导和尾随空格"。
3)有些列是NULL,我想保留null。例如,A || B. (第二列为空。)
示例:
原始文件(test.dat)有一行制表符分隔数据,共7列, 2列后" NY"是NULL :
A New York NY Meal - Seafood Grocery Department
请注意某些字段有前导/尾随空格:
(" A ", "Meal - Seafood ", " Grocery Department ")
这是我在新文件中想要的最终版本:
A|New York|NY|||Meal - Seafood|Grocery Department
任何人都可以编写我可以在Linux中使用的示例代码或shell脚本来输出新文件吗?
谢谢!
答案 0 :(得分:0)
posix字符类[[:space:]]
,您可以使用*
来匹配零个或多个空格。文字\t
与标签匹配。像,
$ sed "s/^[[:space:]]*//" test.dat | sed "s/[[:space:]]*\t[[:space:]]*/|/g" \
| sed "s/[[:space:]]*$//"
A|New York|NY|Meal - Seafood|Grocery Department
$ cat test.dat
A New York NY Meal - Seafood Grocery Department
答案 1 :(得分:0)
您可以使用awk
。
假设:
$ cat -t file.tsv
A ^INew York^INY^I^I^IMeal - Seafood ^I Grocery Department
(标签显示为^I
)那里......)
$ awk 'BEGIN{FS="\t"; OFS="|"}
{for (i=1; i<=NF;i++) {
gsub(/^[ ]+/,"",$i); gsub(/[ ]+$/,"",$i)
}
} 1' file.tsv
A|New York|NY|||Meal - Seafood|Grocery Department