Как получить конкретные слова по индексу в строке bash - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть скрипт, который принимает параметры, такие как:

script.sh 1 3

Затем я хочу просмотреть текстовый файл и распечатать первое и третье слова из каждой строки. Я просто не знаю, как это сделать. Если бы кто-нибудь мог помочь, я бы по-настоящему это оценил ...

Это то, что у меня сейчас есть:

counter=0
wordcounter=0

param=$(echo "$3" | tr , " ") 

words(){
    for word in $1; do
        for col in $param; do
            if [ $wordcounter -eq $col ]; then
                echo $word
            fi
        done 
    done
    wordcounter=$((wordcounter + 1))
}

eachline() {
    newline=$(echo "$1" | tr , " ")
    for word in $newline; do
        if [ $counter -gt 3 ]; then
            echo "$word"
        fi
        counter=$((counter + 1))
    done
    if [ $counter -gt 0 ]; then 
        words "$newline"
    fi
    counter=$((counter + 1))
}

while read line; do
    eachline $line
done < company/employee.txt

1 Ответ

0 голосов
/ 10 ноября 2018

Использование awk:

$ awk '{print $1 " " $3}' file

для file:

1 2 3 4 5
6 7 8 9 0

Вывод:

1 3
6 8

В скрипте bash:

#!/bin/bash

awk_command="{print";
for i in "$@"; do
    awk_command="${awk_command} \$${i} \" \"";
done    
awk_command="${awk_command}}";
awk "$awk_command" file

С помощью этого скрипта вы можете передать любое количество индексов:

Для 1 и 2:

$ ./script.sh 1 2
1 2 
6 7 

Для 1, 2 и 5:

$ ./script.sh 1 2 5
1 2 5 
6 7 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...