Использование bash и sed - PullRequest
       6

Использование bash и sed

1 голос
/ 12 января 2011

Хорошо, так что я не слишком хорош в этом, но у меня есть скрипт bash, чтобы выбрать случайное число, а затем использовать sed для чтения строк из файлов.Это не работает, и я, должно быть, сделал что-то не так.Может ли кто-нибудь исправить мой код?

Я хочу, чтобы код извлекал строку (случайное число) из каждого из этих файлов, а затем выводил ее в виде одной строки (с пробелами между ними). ​​

NUMBER=$[ ( $RANDOM % 100 )  + 1 ]
sed -n NUMBER'p' /Users/user/Desktop/Street.txt
sed -n NUMBER'p' /Users/user/Desktop/City.txt
sed -n NUMBER'p' /Users/user/Desktop/State.txt
sed -n NUMBER'p' /Users/user/Desktop/Zip.txt

Ответы [ 3 ]

1 голос
/ 12 января 2011

Вам, вероятно, нужно использовать $NUMBER в ваших командах sed, а не просто NUMBER (или ${NUMBER}, если рядом с ним находится другой текст). Пример:

sed -n "${NUMBER}p" /Users/user/Desktop/Street.txt
0 голосов
/ 12 января 2011

Это имеет преимущество выбора из всего файла, а не только из первых 100 строк.Он будет выбирать разные строки из каждого файла.

for f in Street City State Zip
do
    printf '%s ' "$(shuf -n 1 "/Users/user/Desktop/$f.txt")"
done
printf '\n'
0 голосов
/ 12 января 2011

Следующий скрипт будет использовать то же самое случайно выбранное число, чтобы извлечь эту строку из каждого из 4 указанных вами входных файлов и объединить эти строки в одну переменную с именем $outstring.

#!/bin/bash

NUMBER=$(((RANDOM % 100)+1))

for file in Street City State Zip; do
   outstring+="$(sed -n "${NUMBER}p" "./${file}.txt") "
done

echo $outstring

Примечание: Если вы хотите (потенциально) разные номера строк в каждом из 4 входных файлов, просто поместите оператор NUMBER= в цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...