У меня есть файл с такими строками:

0 6 973 1346 2318 456 431 93 58 1 1 0 0 0 0

Я хочу извлечь 1-е, 4-е и 5-е число и сохранить их в переменных в bash для дальнейшего использования. В приведенном выше примере я хочу значения «0», «1346» и «2318».

Я думаю использовать sed, но я не знаю как. Любые другие способы также приветствуются.

пс. Спасибо за ответ, вот что я использую сейчас:

for fn in $(cat filelist); do
  more $fn | \                                                                                                                                                                         
      while read str; do
          echo $str
          var=$(echo $str | awk -F" " '{print $1,$2,$3,$4,$5}')
          set -- $var
          echo $1
          echo $4
          echo $5
  done
done

Это работает, да ~~

3 ответа3

1

кошка myFile.txt | скрипт ниже:

#!/bin/bash
while read lineOfText
do
    echo $lineOfText | any of the approaches from http://www.unix.com/shell-programming-scripting/38450-split-string-using-separetor.html
done
1
while read -r fn
    while read -r first second third fourth fifth remainder
    do
        echo "$first"
        echo "$fourth"
        echo "$fifth"
    done < "$fn"
done < filelist
0

Если я могу предложить предложение, вы можете упростить свой сценарий следующим образом:

for fn in $(< filelist); do  #Replacement for $(cat filelist)
  while read str; do
    echo $str
    # No need for set --, unless you *really* want the values to be
    # placed in $1, $4, and $5
    read var1 var4 var5 <<< "$( echo $str | awk '{print $1,$4,$5}' )"
    echo $var1
    echo $var4
    echo $var5
  done < $fn  # Replaces more $fn |
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .