最初は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.stdin
1
' & '
''.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)