Articles

Looping genom innehållet i en fil i Bash

ofta är det ett krav att läsa var och en av raden från en fil med ett bash-skript. Det finns olika sätt att läsa raderna bildar en fil. I exemplet nedan har vi först beskrivit hur du skapar en provfil och kör sedan ett skript som läser den provfilen.

skapa en fil att läsa

# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt

genom att köra ovanstående kod får vi följande resultat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

använda Do-While

i detta tillvägagångssätt använder vi en Do-while loop för att läsa en fil., Vi ger filnamnet som en inmatning i slutet av filen. Först skapar vi ett skript och ger exekveringsbehörighet till det. Då kan det bara läsa filen och visa resultatet.

#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt

att köra ovanstående kod ger oss följande resultat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

att använda för och i

i nästa tillvägagångssätt använder vi en för slinga tillsammans med in-klausulen. Här lagrar vi resultatet av cat command (som är varje rad) i en variabel som är en del av för loop och echo variabeln.,

#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done

att köra ovanstående kod ger oss följande resultat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

med endast echo

Vi kan också få innehållet i filen genom att bara använda echo. Men resultatet kommer att komma ut som en rad linjer och skrivas ut som enlinjeutgång som visar kombination av alla linjer.

echo $( < a_file.txt )

att köra ovanstående kod ger oss följande resultat:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday

läsa fil med tomma rader

om en fil har några rader som är tomma kan vi undvika dem i utdata med hjälp av följande kod., Detta använder IFS (internal Field Separator) är inställd på tom sträng så att de tomma linjerna behandlas som fältavskiljare och undvikas i utgången. Förutsatt att det finns tomma rader mellan 3: e och 4: e raden, kommer dessa tomma panträtter inte att skrivas ut.

#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt

att köra ovanstående kod ger oss följande resultat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

publicerad 03-Jan-2020 11:45:05

annonser