2017-09-16 72 views
1

AWK到打印線2,並把該第三和第四backslashs線1和2之間AWK打印LINE2到某一個地方

線1是

http://example.com// 
test 

輸出所需

http://example.com/test/ 

測試可以是任何文字 所以通過傾斜字做

我已經嘗試與此AWK線,但在其放入到行的末尾1 不是我想要的

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

回答

1

這是一個(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 
+1

如果原來的awk你的意思是破舊的awk,那麼你永遠不必說,如果一個腳本失敗,因爲大多數腳本將因爲它是破爛不堪。相反,如果你的意思是用nawk或者POSIX awk,那麼值得注意,但是我沒有看到任何會導致awk失效的東西(當然,除了通常的getline警告外)。 –

0

給這個AWK的一行一試:

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

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

整潔。如果第二行例如是'test&',它會失敗(我正在玩類似的想法)。 ...並用這個輸入你可以刪除''/「'部分。 :D –

+0

恕我直言,你應該只使用非恆定的條件進行打印,當你想要有條件地進行打印時。通過使用'{...} $ 0 = $ 1'而不是'{...; $ 0 = $ 1} 1',您必須考慮是否存在$ 0可能評估awk認爲是零的情況,所以會導致當前記錄不合要求地不被打印。它還讓下一代人閱讀你的代碼,想知道你爲什麼寫這個代碼,因爲他們會認爲你故意在某種情況下試圖產生輸出,所以它會混淆你的代碼。投資額外的2個角色是值得的! –

1

如何:

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

保存的第一行,並跳到下一行。保存第二行,將$0重置爲第一行,將第二行的內容插入倒數第二列並打印。

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

短GNU sed的替代:

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