AWK / ...行開始置換の行カウンタをどのようにインクリメントしますか?

AWK / ...行開始置換の行カウンタをどのようにインクリメントしますか?

最初はSED()を考えましたが、sed "s/^/COUNTER \&/" /tmp/1.tex単一ライン用に設計されており、sedを介してカウンタ自体を増やすことができなかったため、awk統合方法の広範な経験があるので今考えています。gawkデータ

What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline
What & South Dragon & North Dragon    & 5 \\ \hline

期待される出力

1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

オペレーティングシステム:Debian 8.5

答え1

nlファイル行番号を付けるユーティリティです。使用法:

nl /path/to/file

あなたの具体的な場合:

$ nl  -s ' & ' input.txt                                                                                                 
     1 & What & South Dragon & North Dragon    & 5 \\ \hline
     2 & What & South Dragon & North Dragon    & 5 \\ \hline
     3 & What & South Dragon & North Dragon    & 5 \\ \hline

答え2

これはあなたが追求することを達成します。 (同じ内容なのですがawk '$0=NR" & "$0' filenameちょっと謎ですね)

awk '{print NR,"&",$0}' filename
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

あるいはsed、必要に応じて同じ結果が生成されます。

sed = filename | sed 'N;s/\n/ \& /'

perl近い。

perl -pe '$_="$. & $_"' filename
perl -pe 's/^/$. & /' filename

答え3

Pythonは素晴らしい選択肢かもしれません。

$ python -c "import sys;lines=[str(i)+' & '+l for i,l in enumerate(sys.stdin,1)]; print ''.join(lines)" < input.txt      
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

テキストをPythonの標準入力にリダイレクトし、そこから行を読む方法で動作します。この関数は、入力として指定されたenumerate()行数を提供し、開始インデックスです。残りは簡単です。インデックスを行自体に関連付けられた文字列に変換して、新しい文字列のリストを構築します。最後に、この関数はリスト内のすべての項目をtestに再組み立てします。sys.stdin1' & '''.join()

または、以下は読みやすくするために複数行のスクリプトファイルバージョンです。

#!/usr/bin/env python
import sys

for index,line in enumerate(sys.stdin,1):
    print str(index) + ' & ' + line.strip()

動作原理は同じです。

$ ./line_counter.py  < input.txt                                                                                         
1 & What & South Dragon & North Dragon    & 5 \\ \hline
2 & What & South Dragon & North Dragon    & 5 \\ \hline
3 & What & South Dragon & North Dragon    & 5 \\ \hline

しかし、bashで実行したい場合は、次のようにすることもできます。

$ counter=1; while read line ; do printf "%s & %s\n" "$counter" "$line" ; counter=$(($counter+1)) ; done < input.txt
1 & What & South Dragon & North Dragon    & 5 \ hline
2 & What & South Dragon & North Dragon    & 5 \ hline
3 & What & South Dragon & North Dragon    & 5 \ hline

答え4

cat -nこれは自動番号付けで使用するためのオプションでもあります。

while read num line;do echo $num "&" $line;done <<<$(cat -n a.txt)

関連情報