2017-04-12 17 views

答えて

1
While read -r row 

これはWhileというコマンドを実行しようと、あなたはおそらくそのためにエラーが発生します。シェルキーワードはwhileです。

do  
    line = ($row) 

これは、コマンドを実行しようとしますが、あなたが何をしたいのGNU coreutilsの(line - read one line)からプログラムである、lineと呼ばれる、おそらくありません。シェル内の割り当てはでなく、には等号の周りに空白が必要です。

その割り当てが機能する場合は、lineという配列が作成されます。

for word in $line 

名前だけで配列を参照すると、最初の項目に展開されるため、ここではループは使用できません。

do 
     echo ${word[0]} 

そしてここでは、インデックスはwordは単一の値ではなく配列であることを行っているので、非常に便利ではありません。 $row*のようなグロブ文字が含まれている場合、彼らはマッチするファイル名に展開されますけれども

while read -r row ; do 
    words=($row); 
    echo "${words[0]}" 
done 

:私はあなたが欲しいものを疑う

はこれです。

これが良いだろう。

read -r -a words 
echo "${words[0]}" 

または単に

read -r line 
echo "${line%% *}"  # remove everything after the first space 
+1

または単に 'read -r word _; echo "$ word" ' –

0

を "$ S0 $ S0 $ t1に追加" であると言う:

while read -r row 
do 
    echo $row | awk '{print $1}' 
done 

while read -r rowを求めますユーザの入力とそれをrow変数に格納すると、awk '{print $1}'はユーザ入力の最初の単語のみを表示します。

+0

私は、ユーザからの入力を取っていないよいないが、行が別のファイルから来ます。ファイルが引数です。 –

0

各トークンを別々の行にしたいですか?単にsedを使用しないのはなぜですか?その後、

$ echo "1 2 3 hi" | sed -r 's/[ \t]+/\n/g' 
1 
2 
3 
hi 

あなたは各行の最初の単語をしたい場合は、:|とちょうどSEDへのパラメータとしてファイル名を与える

$ echo "1 2 3 hi" | sed -r 's/^([^ \t]+).+/\1/' 
1 

そのファイルであれば、その後、「エコー...」を削除:

$ sed -r 's/^([^ \t]+).+/\1/' file.txt 
関連する問題