ファイル内のすべての行/ディレクトリ内のすべてのファイルを収集する方法

ファイル内のすべての行/ディレクトリ内のすべてのファイルを収集する方法

私のディレクトリにテキスト行を含む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)

おすすめ記事