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