私のディレクトリにテキスト行を含む100個のファイルがあります。ファイルのすべての行を1行にリンクしたいと思います。一度にすべてのファイルに対してこれを行いたいと思います。cat
ここではうまくいかないようです。
はい
ファイル1
atagacat
agataga
ctcatctat
tagcatag
File_1_cat
atagacatagatagactcatctattagcatag
ファイル_2
atagacat
agataga
ctcatctat
tagcatag
file_2_cat
atagacatagatagactcatctattagcatag
ベストアンサー1
シンプルcat
+tr
で十分です。そうでない場合は、システムに問題がある可能性があります。
sh-4.2$ cat file1 file2
atagacat
agataga
ctcatctat
tagcatag
atagacat
agataga
ctcatctat
tagcatag
sh-4.2$ cat file1 file2 |tr -d '\n'
atagacatagatagactcatctattagcatagatagacatagatagactcatctattagcatag
ここでオンラインでテストしてください:http://www.tutorialspoint.com/execute_bash_online.php?PID=0Bw_CjBb95KQMdUM4UER3SzE5Sk0
修正する
各ファイルから新しい行を個別に削除し、すべてのファイルを一緒にリンクしないことをコメントで明確にした後(ps:コメントに有用な説明を追加しないでください。主な質問を編集してください)、次のものを使用できます。コンテンツ:
perl -pe 's/\n//g' file >file_cat #perl -pe is directly equivalent to `sed`.
また、perl -peを使用してより多くのファイルを同時に一括交換することもできます。
perl -pe 's/\n//g' -i file{1..100) #-i : in-place replacements in each file
OR
perl -pe 's/\n//g' -i.bak file{1..100) #in-place replacement keeping also a backup of original file
ALSO this works for all txt files in a directory
perl -pe 's/\n//g' -i.bak *.txt #in line replacement of all txt files in current directory keeping also a back up file
もちろん、他の答えで言及されているループの1つを使用することも、次のように使用することもできます。
while IFS= -r -d '' fname;do
perl -pe 's/\n//g' "$fname" >"${fname}_cat"
#any other command you might need like echo,cat,whatever
done < <(find . -maxdepth 1 -type f -name 'file*' -print0)