1

テキスト ファイルがあり、ファイルの最初の行 (または行) のデータを抽出しようとしています。各データはリストとして保存されます (したがって、各ポイントは独自の行に保存されます)。

例 data.txt:

Name  Col  Samp1  Samp2  Samp3  Samp4  Samp5  Samp6
Car1  Red   49.3   43.2   54.3   52.3   12.5   76.8
Car2  Blu   56.3   12.4   85.4   67.1   24.5   32.5
and so on..

新しいリストを次のようにして、samps.txt という名前の新しいファイルに保存したいと思います。

Samp1
Samp2
Samp3
Samp4
Samp5
Samp6

私はシェル スクリプトに非常に慣れていないので、誰でも提供できるすべてのヘルプを使用できます。

4

6 に答える 6

2

を使用して行を配列read -aに読み取り、次に を使用して配列要素を反復処理します。詳細については、を参照してください。forhelp

于 2012-11-22T23:26:54.050 に答える
2

これはトリックを行います:

$ head -1 data.txt | grep -o 'Samp[0-9]*'

Samp1
Samp2
Samp3
Samp4
Samp5
Samp6

説明:

  1. ファイルの最初の行を表示します。head -1 data.txt

  2. |最後のコマンドの出力を取得し、次のコマンドへの入力として使用します (パイピングと呼ばれます)。

  3. 指定された の一致を出力しregexます。grep -o 'Samp[0-9]*'

は、任意の数字が続くregex 'Samp[0-9]*'任意の文字列に一致します。Samp

出力を保存しsamps.txtてリダイレクト演算子を使用するには>:

$ head -1 data.txt | grep -o 'Samp[0-9]*' > samps.txt

これは、一致するものだけでなく、任意の列見出しに対して機能します'Samp[0-9]*'

$ head -1 data.txt | grep -o '\w*' | tail -n +3 > samps.txt

grep -o '\w*' 単語に一致tail -n +3し、3 行目から始まるすべての行を表示します(つまり、最初の 2 つの列見出しは表示しません)

于 2012-11-22T23:29:06.493 に答える
0

bashを使用するだけです:

set -- $(head -1 data.txt)       # save the words in the first line as $1,$2,...
shift 2                          # discard the first two words
printf '%s\n' "$@" > samps.txt   # print each remaining word on its own line
于 2012-11-23T00:57:17.963 に答える
0

最初の行を変数に読み込む

read -r FIRSTLINE < filename

文字列を単語に分割する

WORDS=( $FIRSTLINE )

単語をループしてファイルに出力する

for WORD in ${WORDS[@]}
do
  echo $WORD >> outputfilename
done

あなたの場合、最初の 2 つの列の値を削除します。${WORDS[@]:2forステートメントで使用して、配列をスライスできます。または、値をファイルにエコーする前に、for ループ内で値をテストすることもできます。

于 2012-11-22T23:36:10.040 に答える
0

フィールドを含むテキスト ファイルを処理する際に、awkが有用なツールであることがわかる場合があります。

awk 'NR==1 { for(i=3;i<=NF;i++) print $i }' file

結果:

Samp1
Samp2
Samp3
Samp4
Samp5
Samp6

説明:

NR is short for the number of rows.
NF is short for the number of fields in the row.
于 2012-11-22T23:53:23.053 に答える
0

Ignacio Vazquez-Abrams の回答は、 pure のみを使用する最良の選択肢であるため、支持しましたbash。彼は完全に機能する例を示していないため、次の例を示します。

read -a samps < "myfile.txt"
printf "%s\n" "${samps[@]:2}"

出力:

Samp1
Samp2
Samp3
Samp4
Samp5
Samp6
于 2012-11-23T07:26:37.897 に答える