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
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
這是一個(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的一行一試:
kent$ cat f
http://example.com//
test
kent$ awk -v RS="\0" '{sub("/$",$2"/",$1)}$0=$1' f
http://example.com/test/
整潔。如果第二行例如是'test&',它會失敗(我正在玩類似的想法)。 ...並用這個輸入你可以刪除''/「'部分。 :D –
恕我直言,你應該只使用非恆定的條件進行打印,當你想要有條件地進行打印時。通過使用'{...} $ 0 = $ 1'而不是'{...; $ 0 = $ 1} 1',您必須考慮是否存在$ 0可能評估awk認爲是零的情況,所以會導致當前記錄不合要求地不被打印。它還讓下一代人閱讀你的代碼,想知道你爲什麼寫這個代碼,因爲他們會認爲你故意在某種情況下試圖產生輸出,所以它會混淆你的代碼。投資額外的2個角色是值得的! –
如何:
$ awk -F/ -v OFS=/ 'NR == 1 { line = $0; next }
{ s = $0; $0 = line; $(NF - 1) = s; print }' file
保存的第一行,並跳到下一行。保存第二行,將$0
重置爲第一行,將第二行的內容插入倒數第二列並打印。
$ awk 'NR==1{sub(/\/$/,""); s=$0; next} {print s $0 "/"}' file
http://example.com/test/
短GNU sed的替代:
sed '1{N; s~/*\n\(.*\)~/\1/~;}' file
http://example.com/test/
如果原來的awk你的意思是破舊的awk,那麼你永遠不必說,如果一個腳本失敗,因爲大多數腳本將因爲它是破爛不堪。相反,如果你的意思是用nawk或者POSIX awk,那麼值得注意,但是我沒有看到任何會導致awk失效的東西(當然,除了通常的getline警告外)。 –