Великие умы думают одинаково ... Хотя вы можете использовать awk
разделение, вероятно, столь же легко использовать цикл while
для чтения информации из вашего файла и разделения первой комбинации нужных данных.в label1
и label2
с использованием простых расширений параметров обрезки от <-end
и затем beginning->
до символа '/'
, который разделяет их.В этот момент вам просто нужно взять 1/2 length + 1
из label1
и затем объединить его с сохраненным label2
для желаемой строки.
Что-то похожее на:
while read -r label stuff; do ## read combined label, ignore 2nd string stuff
l1="${label%/*}" ## isolate label1 (l1)
l2="${label#*/}" ## isolate label2 (l2)
l1=${l1:$((${#l1}/2+1))} ## take len/2+1 of l1
echo "$l1/$l2" ## put shortened l1 and l2 together
done < file
Пример входного файла
Использование входного файла и примера, показанного в файле:
$ cat file
label1-label1/label2 label1
label3-label3/label4 label3
label5-label5/label6 label5
United-States-United-States/New-York United-States
Пример использования / Вывод
Простой выбор и использование средней вставки мыши в терминале в каталоге, где расположен file
, обеспечивает следующий желаемый вывод:
$ while read -r label stuff; do ## read combined label, ignore 2nd string stuff
> l1="${label%/*}" ## isolate label1 (l1)
> l2="${label#*/}" ## isolate label2 (l2)
> l1=${l1:$((${#l1}/2+1))} ## take len/2+1 of l1
> echo "$l1/$l2" ## put shortened l1 and l2 together
> done < file
label1/label2
label3/label4
label5/label6
United-States/New-York
( note: UtLox был первым ответом здесь, поэтому отдавайте первенство, какой бы почтительности он ни был, это по сути тот же подход, просто другой подход к тому, где происходит длина, деление и сложение)
Вероятно, самый простой подход здесьесли вы можете гарантировать, что последняя часть строки всегда будет label1
.Если это верно для вашего файла, то вам просто нужно расширение с одним параметром для вывода желаемого результата, например,
while read -r label l1; do ## read both parts of line
echo "$l1/${label#*/}" ## put l1 with trimmed label
done < file
Пример использования / Вывод
$ while read -r label l1; do ## read both parts of line
> echo "$l1/${label#*/}" ## put l1 with trimmed label
> done < file
label1/label2
label3/label4
label5/label6
United-States/New-York
Это просто более простой способ сделать это, если вторая часть каждой строки всегда будет вашей label1
(не нужно разбивать то, что стоит перед '/'
)
Дайте мне знать, если выесть дополнительные вопросы.