0

次の状況で何が間違っているのかわかりません-複数のファイルを1つにマージしたいのですが、それらの多くをマージしたいので、次のようなものを使用したいです:

*input file* that contains lines 
file1.txt >> mergedfiles1.txt 
file2.txt >> mergedfiles1.txt 
file3.txt >> mergedfiles2.txt
file4.txt >> mergedfiles2.txt
...

いつものように単純なスクリプトを使用しようとすると

cat *input file* | while read i
do
cat $i
done

実際にはファイルをマージしませんが、書き込みます

*content* of file1.txt
cat: >> : file does not exist
cat: mergedfiles1.txt : file does not exist

コマンド cat を入力ファイルの各行の先頭に配置しようとしましたが、うまくいきませんでした。

単純な間違いだと思いますが、解決策を見つけることができません。

手伝ってくれてありがとう。

4

4 に答える 4

1

次のように、catを使用して3つのファイルをマージできます。

cat file1 file2 filet3 > merged_files
于 2012-05-14T11:43:54.520 に答える
0

あなたはそれをこのように使う必要があります

cat input_file > output file
于 2012-05-14T11:35:23.483 に答える
0

これは、bashが空のスペースを行区切り文字として扱うためです。

だからあなたはこのことを管理しなければなりません。

実際には>>、入力ファイルからを削除して、次のようにすることができます。

k=0
for line in $(cat inputFile); do
    if [ $k -eq 0 ]; then
        src=$line
    let k=$k+1
    else
    cat $src>>$line
    k=0
    fi
done

前回のbashスクリプトからしばらく経ちましたが、ロジックは非常に単純です。

bashはスペースを行区切り文字として使用するため、行が本当に終わったかどうかを知るためにカウンターを保持する必要があります。したがって、を使用していますkk = 0つまり、行の前半にいるので、ファイル名をvar()に格納する必要がありますsrc

が1の場合kは、行の最後の半分にいることを意味するため、実際にcatコマンドを実行できます。

あなたのテキストが次のような場合、私のコードは機能します:

file1.txt mergedfiles1.txt
file2.txt mergedfiles1.txt
file3.txt mergedfiles2.txt
file4.txt mergedfiles2.txt
于 2012-05-14T11:40:23.040 に答える
0

あなたが何をしたいのかよくわかりませんでしたが、この例が役立つかもしれないと思いました:

#!/bin/bash

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

for file in *
do
    echo "$file"
done

IFS=$SAVEIFS

IFS の操作は、スペースで区切られたファイルを取得して処理できるようにするためのものです。これは、少なくとも私の経験からは、Linux (Unix) よりも Windows レポートから出てくるのが一般的です。

于 2012-05-14T17:04:16.193 に答える