ファイルの各行の上に空白行を追加し、番号を付けます。

ファイルの各行の上に空白行を追加し、番号を付けます。

次のコマンドを使用して、接続されたIPを持つサーバーのリストを出力しました。スクリプトの他の部分では、特定の方法で出力形式を指定する必要があります。各行の上に行番号が増えます。以下の例

 paste <(aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[*].{Name:Value}' --output text) \
         <(aws ec2 describe-instances --query 'Reservations[*].Instances[*].{PrivateIP:PrivateIpAddress}' --output text) | awk 'ORS="\n\n"' >> $TMP1  

任意の出力(tmpファイル):

Dev Server   111.11.11.11

Test Server     222.22.22.22

しかし、このように各空の行に数値をどのように追加できますか?

はい

1
Dev Server   111.11.11.11
2
Test Server  222.22.22.22

ベストアンサー1

空行が挿入されないようにファイルの生成方法を変更した場合(最後のステップを削除するawk)、短いsedスクリプトを使用して=行番号を挿入できます。

$ cat file
Dev Server   111.11.11.11
Test Server     222.22.22.22
$ sed '=' file
1
Dev Server   111.11.11.11
2
Test Server     222.22.22.22

=sed現在の行番号を独自の行に出力する編集コマンドです。デフォルトでは、sed編集バッファの内容は、次の行に進む前に編集スクリプトの最後に出力されます。編集バッファは編集スクリプトによって変更されないため、データはそのまま再生されます。

しかし、理想的には、クエリを2回実行することなく、コマンドが生成できると思われるJSONドキュメントをインポートしawsて渡して正しい出力を得ることです。jq


指定されたデータを処理するには、次を使用しますawk

$ cat file
Dev Server   111.11.11.11

Test Server     222.22.22.22

$ awk '/./ { print ++c; print }' file
1
Dev Server   111.11.11.11
2
Test Server     222.22.22.22

質問のように最後に空白行が必要な場合:

$ awk '/./ { print ++c; print } END { print }' file
1
Dev Server   111.11.11.11
2
Test Server     222.22.22.22

どちらawkのコマンドも、空でない各行の前にc1から始まり、増加するカウンタがあります。

おすすめ記事