#shell #awk #sed
#оболочка #awk #sed
Вопрос:
У меня есть входной файл в виде
cell 1
Input A1;
Input A2;
Input B;
Output Z;
Type comb
Function ((A1 A2) B) ;
cell 2
Input A1;
Input A2;
Input B;
Input C;
Output Z;
Type comb
Function (((A1 A2) B) C) ;
Могу ли я представить выше в табличной форме как
cell Input Output Type Function
1 A1,A2,B Z comb ((A1 A2) B
2 A1,A2,B,C Z comb (((A1 A2) B) C)
Используя column
команду, я получаю cell,input,output, Type, function
параметры в строке, но я хочу затем в виде столбца.
Я также пытался использовать цикл for и обрабатывать каждый параметр, присваивать его переменной и печатать эту переменную с помощью команды echo, но на выходе отображаются все ячейки вместе, все входные данные вместе и т.д. Он не отображается в правильном формате.
Комментарии:
1. Пожалуйста, добавьте свои усилия в виде кода в свой вопрос, что настоятельно рекомендуется на SO, спасибо.
2. Я попытался использовать цикл for и обрабатывать каждый параметр, присваивать его переменной и печатать эту переменную с помощью команды echo, но на выходе отображаются все ячейки вместе, все входные данные вместе и т.д. Он не отображается в правильном формате.
3. Конечно, спасибо, что сообщили о ваших усилиях, пожалуйста, добавьте их в свой вопрос, в этом нет ничего плохого или правильного, мы все здесь, чтобы учиться, приветствия.
Ответ №1:
Не могли бы вы попробовать следующее, написанное и протестированное только с показанными примерами.
awk '
BEGIN{
OFS="t"
print "celltInputtoutputttypetfunction"
}
{
sub(/; /,"")
}
/^cell/{
if(value["cell"]){
print value["cell"],value["input"],value["output"],value["type"],value["func"]
delete value
}
value["cell"]=$NF
next
}
/^Input/{
value["input"]=(value["input"]?value["input"] ",":"")$NF
next
}
/^Output/{
value["output"]=(value["output"]?value["output"] ",":"")$NF
next
}
/^Type/{
value["type"]=(value["type"]?value["type"] ",":"")$NF
next
}
/^Function/{
sub(/[^ ]* /,"")
value["func"]=(value["func"]?value["func"] ",":"")$0
next
}
END{
if(value["cell"]){
print value["cell"],value["input"],value["output"],value["type"],value["func"]
}
}' Input_file | column -t -s $'t'
Вывод будет следующим.
cell Input output type function
1 A1,A2,B Z comb ((A1 A2) B)
2 A1,A2,B,C Z comb (((A1 A2) B) C)