我有一个文本文件,其中包含如下文本:
Somename of someone 1234 7894
Even some more name 2345 5343
Even more of the same 6572 6456
I am a customer 1324 7894
I am another customer 5612 3657
Also I am a customer and I am number Three 9631 7411
And I am number four and not the latest one in list 8529 9369
And here I am 4567 9876
我需要从中制作一个CSV文件,但是问题是名称包含12列,因此我需要将前12列的所有内容合并为1列,因此CSV文件如下所示:
Somename of someone,123456,789456
cut -d ' ' -f1-11 test | sed "s/[[:space:]]/\\ /g" | sed "s/\t/\\ /g" > test1
给我一个包含前12列的文件。
最佳答案
使用GNU sed为\ s / \ S表示空间/非空间的简写,并使用-E启用ERE:
$ sed -E 's/\s+(\S+)\s+(\S+)$/,\1,\2/' file
Somename of someone,1234,7894
Even some more name,2345,5343
Even more of the same,6572,6456
I am a customer,1324,7894
I am another customer,5612,3657
Also I am a customer and I am number Three,9631,7411
And I am number four and not the latest one in list,8529,9369
And here I am,4567,9876
以及与任何POSIX sed等效的功能:
$ sed 's/[[:space:]]*\([^[:space:]]\{1,\}\)[[:space:]]*\([^[:space:]]\{1,\}\)$/,\1,\2/' file
Somename of someone,1234,7894
Even some more name,2345,5343
Even more of the same,6572,6456
I am a customer,1324,7894
I am another customer,5612,3657
Also I am a customer and I am number Three,9631,7411
And I am number four and not the latest one in list,8529,9369
And here I am,4567,9876
或任何awk:
$ awk -v OFS=',' '{x=$(NF-1) OFS $NF; sub(/([[:space:]]+[^[:space:]]+){2}$/,""); print $0, x}' file
Somename of someone,1234,7894
Even some more name,2345,5343
Even more of the same,6572,6456
I am a customer,1324,7894
I am another customer,5612,3657
Also I am a customer and I am number Three,9631,7411
And I am number four and not the latest one in list,8529,9369
And here I am,4567,9876