awk打印第2行到某个地方

时间:2017-09-16 13:54:31

标签: awk

要打印第2行并将其放在第1行的第3和第4个反斜杠之间

第1行和第2行是

http://example.com//
test

所需的输出

 http://example.com/test/

测试可以是任何单词 所以不能用词来做

我已经尝试过这个awk线,但是它将它放到了第1行的末尾 不是我想要的地方

awk 'NR%2{printf "%s ",$0;next;}1' file1 > file2

5 个答案:

答案 0 :(得分:1)

这是一个(对于lulz,大多数)与gawk和mawk一起工作,但是失败了,例如original-awk:

$ awk '{printf (sub(/\/$/,"")?$0:"") (getline?$0:"") "/" ORS; exit}' file

另一个,如果NR==2上的记录有&,但是滥用了这个功能,则会失败:

$ awk '{p=$0;sub(/.$/,(getline?$0 "&":""),p);print p;exit}' file

答案 1 :(得分:1)

这个怎么样:

$ awk -F/ -v OFS=/ 'NR == 1 { line = $0; next } 
    { s = $0; $0 = line; $(NF - 1) = s; print }' file

保存第一行并跳到下一行。保存第二行,将$0重置为第一行,将第二行的内容插入倒数第二个字段并打印。

答案 2 :(得分:1)

$ awk 'NR==1{sub(/\/$/,""); s=$0; next} {print s $0 "/"}' file
http://example.com/test/

答案 3 :(得分:0)

试试这个awk单行:

kent$  cat f
http://example.com//
test

kent$  awk -v RS="\0" '{sub("/$",$2"/",$1)}$0=$1' f
http://example.com/test/

答案 4 :(得分:0)

短GNU sed 替代方案:

sed '1{N; s~/*\n\(.*\)~/\1/~;}' file
http://example.com/test/