Linux / bashの1行のコードは複雑な文を印刷します。

Linux / bashの1行のコードは複雑な文を印刷します。

2つのデータ列を持つファイルがあります。

kevin n1

edwin n2

mevin n3

私はこのような宣言を生成したいと思います。

--This is kevin and his 'roll number' is n1

--This is edwin and his 'roll number' is n2

--This is mewin and his 'roll number' is n3

これでこの操作を実行することはできませんawk。ステートメントの途中でダッシュ "--" や一重引用符 (') を使用しません。

上記のような出力が欲しいですか?

答え1

awkを使用してください:

awk 'NF{print "--This is " $1 " and his \047roll number\047 is " $2 }' file

\047一重引用符の 8 進コードです'

別のオプションは、一重引用符文字を含む変数を定義することです。

awk -v sq="'" 'NF{print "--This is " $1 " and his "sq"roll number"sq" is " $2 }' file

答え2

シンプルwhileループ:

while read -r name roll; do if [[ -z "$name" ]]; then echo ; else echo "--This is $name and his 'roll number' is $roll"; fi; done < infile
--This is kevin and his 'roll number' is n1

--This is edwin and his 'roll number' is n2

--This is mevin and his 'roll number' is n3

このソリューションは、OPが望むように見えるので、空白行を維持します。

infile次のように:

cat infile 
kevin n1

edwin n2

mevin n3

これにはエラー処理などはなく、もちろんOPで指定したファイル形式によって異なります。

答え3

パール1行:

perl -ane '@F && printf "--This is %s and his '\''roll number'\'' is %s\n", @F' file

関連情報