awk将第2行打印到某个位置

awk将第2行打印到某个位置,awk,Awk,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 这里有一个(主要针对lulz)可以用于gawk和mawk,但无法用于例如原始a

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
这里有一个(主要针对lulz)可以用于gawk和mawk,但无法用于例如原始awk:

$ awk '{printf (sub(/\/$/,"")?$0:"") (getline?$0:"") "/" ORS; exit}' file
另一种情况是,如果
NR==2
上的记录具有
&
,则会失败,尽管:

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

尝试一下这款awk one liner:

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

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

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

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

Short GNUsed备选方案:

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

整洁的如果第二行是例如
test&
,它就会失败,尽管(我当时也在玩弄类似的想法)。。。通过该输入,您可以删除
“/”
部分:DIMHO如果希望有条件地进行打印,则仅应使用非恒定条件进行打印。通过使用<代码> {…} 0美元=1美元<代码>而不是<代码> {…;$ 0=$1 } 1 < /代码>,您必须考虑是否有0美元可能会评估AWK会考虑零个数的情况,从而导致当前记录不希望被打印。这也会让下一个阅读你的代码的人想知道你为什么要写这样的代码,因为他们会认为你故意只在某些条件下产生输出,所以会混淆你的代码。投资额外的2个字符是值得的!如果说原始awk是指旧的、坏的awk,那么你永远不需要说脚本是否会失败,因为大多数脚本都会失败,因为它是旧的、坏的。如果你的意思是使用nawk或posixawk,那么这是值得注意的,但是我没有看到任何会导致它在运行awk时失败的东西(当然,除了所有常见的getline警告)。