例:ファイルがあり、01.txt
この02.txt
ファイルのデータを新しいファイルに追加する必要がありますnew.txt
。
01.txt
後ろのファイルに基づいてデータを追加する必要があります02.txt
。
以前は、ファイル(01.txt
02.txt
)の最初の行と最後の行のみを削除してから、新しいファイルに追加する必要がありました。
UNIXを使用してこれを達成するにはどうすればよいですか?
答え1
別の方法:
for file in 01.txt 02.txt; do sed '1d;$d;' "$f"; done > output
これは、多くのファイルをリンクする必要がある場合に特に便利です。
for file in *.txt; do ...
シェル拡張を使用することもできます。
for file in 0{1,2}.txt; do ...
答え2
sed を使用して最初の行と最後の行を削除できます。
sed -e '1d' -e '$d' file1 > output
sed -e '1d' -e '$d' file2 >> output
sed -e '1d' -e '$d' file3 >> output
答え3
ファイルの最初の行を除くすべての内容を印刷する簡単な方法は次のとおりです。tail
:
tail -n +2 01.txt
ファイルの最後の行を除くすべての内容を印刷するには、次のようにします。head
:
head -n -1 01.txt
したがって、これらすべてを1つにまとめて、最初の行と最後の行を除くすべての項目を印刷して01.txt
別の02.txt
名前で保存するには、次のように03.txt
します。サブシェル上記のコマンドの出力を2つのファイルにマージします。
(tail -n +2 01.txt | head -n -1; tail -n +2 02.txt | head -n -1) > new.txt
答え4
GNUの使用sed
:
sed -s '1d;$d' ./*.txt > output
*.txt
注:出力ファイルの名前がワイルドカードパターン(上記)と一致しないことを確認します。それ以外の場合は、次のように書く必要があります。
sed -sn '1d;$d;w output.txt' ./*.txt
(output.txt
以前は存在しなかったと仮定)。