ヘッダーとフッター行を除くすべての行の後に文字列を追加します。

ヘッダーとフッター行を除くすべての行の後に文字列を追加します。

ファイルのヘッダーとフッターを除いて、ファイルの各行の後に文字列を追加したいと思います。そのため、以下のコマンドを使用してヘッダーとフッター以外の行の範囲を変更しましたが、ヘッダーとフッターが削除され、ヘッダーとフッター行を削除したくありません。

sed -n '2,5p; '"$str_var"'' abc.dat > abc.dat.temp

以下のコマンドを使用してヘッダーをスキップして他の行を変更しようとしても、フッター/ティーザー行を同じままにするオプションはありません。

sed '1! s/$/'"$str_var"'/g' abc.dat > abc.dat.temp

ヘッダーとフッター行を除くファイルのすべての行を変更する方法に関する提案とコマンドは、ヘッダー/フッター行を削除しないでください。

答え1

ヘッダーとフッターがそれぞれ1行であると仮定します。最初の行と最後の行は追加の処理をスキップします。デフォルトでは、すべての行が印刷されます。

$ seq 10 | sed '1n; $n; s/$/ hello/'
1
2 hello
3 hello
4 hello
5 hello
6 hello
7 hello
8 hello
9 hello
10

答え2

最初の行を除くすべての行sedに異なる方法で使用して追加し、最後の行であれば前に進みます。s/$/.../!1q$

sed '$q ;1 !s/$/ append/' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10

または以下を使用してくださいawk

awk 'BEGIN{ getline line} {print line; line=$0 " append";} END{print $0}' <(seq 10)
1
2 append
3 append
4 append
5 append
6 append
7 append
8 append
9 append
10

答え3

awk行数に関係なくファイルの場合:

$ awk -v last=$(wc -l < input) 'NR!=1 && NR!=last { print $0 " and more stuff" } NR==1||NR==last { print }' input
header
foo and more stuff
bar and more stuff
baz and more stuff
quux and more stuff
freeble and more stuff
bletch and more stuff
footer

入力ファイルの行数を取得し、変数wcに保存するために使用されます。awk次に、ヘッダーとフッターを個別に印刷し、サフィックスを含む他のすべての行を印刷します。

NR!=1 && NR!=last {
   print $0 " and more stuff"
} 
NR==1 || NR==last {
    print
}

答え4

私は次の方法でそれをしました

入力ファイル

10
20
30
40

注文する

 for i in `awk '{print NR}' inputfile| wc -l| awk '{print $1-1}'`; do sed '2,'$i's/$/praveen/g' inputfile;done

出力

10
20praveen
30praveen
40

関連情報