Оболочки - Значения печати в строке разделенной запятой

Разобрался. Именованный канал сделал свое дело:

mkfifo fifo
echo "$message" > fifo &
mpack -s "test mail" -d fifo myImage.jpg john@example.com
rm fifo
0
26.11.2018, 21:03
3 ответа
$ awk -F, '{ print "line " NR; for (i=1;i<=NF;i++) { print "Col " i "="$i } }' input
line 1
Col 1=abc
Col 2=def
Col 3=ghi
line 2
Col 1=abc
Col 2=ghi
line 3
Col 1=def
Col 2=abc
Col 3=ghi
line 4
Col 1=def
Col 2=abc
line 5
Col 1=abc
Col 2=def
line 6
Col 1=abc
Col 2=def
Col 3=ghi

Если вы действительно хотите транслитерировать числовые столбцы в «первый», «второй» и так далее, вы можете определить массив и использовать iв качестве индекса для поиска слова, соответствующего числу.

0
28.01.2020, 02:41

С помощью bash можно сделать

ordinals=( first second third fourth fifth sixth )
n=0
while IFS=, read -ra cols; do
    echo "line $((++n))"
    for i in "${!cols[@]}"; do
        echo "${ordinals[i]} col=${cols[i]}"
    done
done < file

Это считывает слова в каждой строке в массив с именем cols, затем мы выполняем интерференцию по индексам этого массива, чтобы мы могли сопоставить значение с порядковым номером.

Для первых 3-х строк получаем

line 1
first col=abc
second col=def
third col=ghi
line 2
first col=abc
second col=ghi
line 3
first col=def
second col=abc
third col=ghi
1
28.01.2020, 02:41

Предполагая, что входной файл имеет не более трех столбцов, в следующем примере используется циклwhile-readдля чтения разделенных запятыми -значений из стандартного ввода и вывода их в формате, аналогичном тому, что вы показали:

#!/bin/sh

while IFS=, read -r first second third
do
    printf 'Line %d:\n' "$(( ++n ))"
    ${first:+printf 'First:\t%s\n' "$first"}
    ${second:+printf 'Second:\t%s\n' "$second"}
    ${third:+printf 'Third:\t%s\n' "$third"}
done

Расширение параметра ${variable:+word}расширяется до word, если variableустановлено и не пусто -. Код использует это для выполнения printfдля вывода, если соответствующая переменная содержит данные для печати.

Тестирование предоставленных данных:

$./script.sh <file
Line 1:
First:  abc
Second: def
Third:  ghi
Line 2:
First:  abc
Second: ghi
Line 3:
First:  def
Second: abc
Third:  ghi
Line 4:
First:  def
Second: abc
Line 5:
First:  abc
Second: def
Line 6:
First:  abc
Second: def
Third:  ghi
0
28.01.2020, 02:41

Теги

Похожие вопросы