Рейтинг:1

Прочитайте из текстового файла и получите соответствующую строку из CSV-файла.

флаг us

У меня есть текстовый файл с именем train_ids.txtи CSV-файл с именем набор данных.csv.

Текстовый файл содержит идентификаторы по этому пути:

блюдо_1.png
блюдо_5.png

Входной CSV-файл имеет много столбцов и строк, но первый столбец содержит идентификаторы. Первый столбец выглядит следующим образом:

блюдо_1 
блюдо_2 
блюдо_3 
блюдо_4 
блюдо_5 

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

Таким образом, выходной файл csv должен быть таким:

блюдо_1 | что_1
блюдо_5 | что_5

Примечания:

  • В выходном CSV-файле я имею в виду что бы ни весь ряд
  • Мы должны удалить .png из текстового файла ids, чтобы иметь возможность искать
  • Весь текстовый файл включает только идентификаторы, как уже упоминалось, нет разных строк
  • Текстовый файл идентификаторов отсортирован, но файл csv не отсортирован
  • идентификаторы в текстовом файле наверняка находятся в файле csv, поэтому нам не нужно ничего пропускать или сообщать.

Я не знаю, как это сделать, не могли бы вы мне помочь?

флаг hr
... аналогично [Найти совпадение в файле csv] (https://askubuntu.com/a/1213425/178692)
terdon avatar
флаг cn
Пожалуйста, [отредактируйте] свой вопрос и дайте нам более подробную информацию. Что такое "что угодно"? Вся строка CSV-файла? Нужно ли нам удалять `.png` из "id"? Может есть другие расширения? Может ли быть несколько символов `.` в имени (например, `foo.png.bar`)? Будут ли файлы отсортированы так, чтобы строка N в одном файле соответствовала строке N в другом? Должны ли строки без совпадающей записи пропускаться или сообщаться?
Abanoub Asaad avatar
флаг us
@terdon Только что обновил вопрос с дополнительными примечаниями.
terdon avatar
флаг cn
Спасибо, но, пожалуйста, дайте нам пример, который мы можем использовать для тестирования наших решений. Вы предоставили нам файл идентификаторов только с двумя строками, а затем файл csv только с одним полем, поэтому мы не можем произвести желаемый результат на основе вашего ввода. Кроме того, вы показываете файл _unsorted_ ids и _sorted_ файл "csv", но затем говорите, что на самом деле все наоборот. Наконец, что определяет поле в вашем csv? Это запятые? Пробелы? Вкладки? Поля указаны в кавычках? Все это важно, чтобы дать вам то, что вы действительно можете использовать.
Рейтинг:1
флаг cn

Для этого вам не нужен скрипт, просто используйте вставить. Вы не показали нам, на что похожи ваши реальные данные, поэтому я предполагаю, что у вас есть что-то вроде этого:

$ кошка train_ids.txt 
блюдо_1.png
блюдо_2.png
блюдо_3.png
блюдо_4.png
блюдо_5.png

и

$ cat набор данных.csv
блюдо_2, что угодно2
блюдо_5, что угодно5
блюдо_4, что угодно4
блюдо_3, что угодно3
блюдо_1, что угодно1

Если это так, вы можете получить желаемый результат:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv)
блюдо_1, что угодно1
блюдо_2, что угодно2
блюдо_3, что угодно3
блюдо_4, что угодно4
блюдо_5, что угодно5

И чтобы получить это как файл, разделенный трубой, а не csv (файл, разделенный запятыми), вы можете сделать:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv) | sed's/, / | /'
блюдо_1 | что угодно1
блюдо_2 | что угодно2
блюдо_3 | что угодно3
блюдо_4 | что угодно4
блюдо_5 | что угодно5

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.