移动数据行

时间:2014-09-17 23:37:59

标签: awk sed

在文本文件中,我将移动与国家/地区名称匹配的行和信息。

示例文本是:

  

U.S.A

     

华盛顿英语9,372,610平方公里

     

法国

     

巴黎法国547,030平方公里

所需的o / p:

  

美国华盛顿英语9,372,610平方公里

     

法国巴黎法国547,030平方公里

我有什么方法可以使用sed或使用awk 来做到这一点?

2 个答案:

答案 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