在文本文件中,我将移动与国家/地区名称匹配的行和信息。
示例文本是:
U.S.A
华盛顿英语9,372,610平方公里
法国
巴黎法国547,030平方公里
所需的o / p:
美国华盛顿英语9,372,610平方公里
法国巴黎法国547,030平方公里
我有什么方法可以使用sed或使用awk 来做到这一点?
答案 0 :(得分:3)
使用sed
:
$ sed 'N;s/\n/ /' file
U.S.A Washington English 9,372,610 sq km
France Paris French 547,030 sq km
使用N
将下一行附加到模式空间,\n
之后用\n
分隔后跟一个简单替换,用空格替换awk
。
使用$ awk '{ORS=(NR%2?FS:RS)}1' file
U.S.A Washington English 9,372,610 sq km
France Paris French 547,030 sq km
:
paste
将输出记录分隔符设置为除第二行之外的每一行的空格,使用记录分隔符将其设置为换行符。
使用$ paste -d " " - - < file
U.S.A Washington English 9,372,610 sq km
France Paris French 547,030 sq km
:
-d " "
- -
将分隔符设置为空格。 {{1}}允许我们缓冲文件中的两行并将它们一起打印,并用分隔符分隔。
答案 1 :(得分:1)
如果线条完全交错成对,你可以将两种文件中的两种线条分开,然后将它们左右粘贴在一起:
$ <countries.txt grep ' sq km$' > countries-loc.txt
$ <countries.txt grep -v -e ' sq km$' -e '^$' > countries-state.txt
$ paste -d ' ' countries-state.txt countries-loc.txt
U.S.A Washington English 9,372,610 sq km
France Paris French 547,030 sq km
清理多个空格和行首空格:
$ paste -d ' ' countries-state.txt countries-loc.txt | tr -s ' ' | sed 's/^ //'
U.S.A Washington English 9,372,610 sq km
France Paris French 547,030 sq km